package com.duoduo.sort;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * @program: algorithm
 * @description: 扑克牌中的顺子
 * @author: chaidl  ！
 * @create: 2022-03-09 19:57
 */
public class 扑克牌中的顺子 {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        System.out.println(isStraight(arr));
    }
    //集合 Set + 遍历
    public static boolean isStraight(int[] nums) {
        Set<Integer> set=new HashSet<>();
        int max=0; int min =14;
        for (int i = 0; i < nums.length; i++){
            //如果为0表示是大小王，直接跳过
            if (nums[i] == 0){
                continue;
            }
           max= Math.max(max,nums[i]);
            min=Math.min(min,nums[i]);
            //如果里面已经有了，表示有重复数字，在这里已经排除了大小王了
            if (set.contains(nums[i])){
                return false;
            }
            set.add(nums[i]);
        }
        return max-min<5;
    }
    //方法二：排序 + 遍历
    public static boolean isStraight2(int[] nums) {
        int joker = 0;
        Arrays.sort(nums); // 数组排序
        for(int i = 0; i < 4; i++) {
            if(nums[i] == 0) joker++; // 统计大小王数量
            else if(nums[i] == nums[i + 1]) return false; // 若有重复，提前返回 false
        }
        return nums[4] - nums[joker] < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
    }
}
